﻿//
// ParallelGrep
//
// Copyright (C) 2011 - Tatsuya Niioka
//
using System.Collections.ObjectModel;

namespace ParallelGrep.ViewModel
{
    /// <summary>
    /// 置換ViewModel
    /// </summary>
    public class ReplaceViewModel : ViewModel
    {
        private MainViewModel m_mainViewModel;

        #region Constructor
        /// <summary>
        /// 指定したMainViewModelで新しい<see cref="ReplaceViewModel"/>クラスを生成します。
        /// </summary>
        /// <param name="mainViewModel">MainViewModel</param>
        public ReplaceViewModel(MainViewModel mainViewModel)
        {
            m_mainViewModel = mainViewModel;
        }
        #endregion

        #region AllPropertyChanged
        /// <summary>
        /// すべてのプロパティの変更通知します。
        /// </summary>
        internal void AllPropertyChanged()
        {
            this.OnPropertyChanged("ReplacementValue");
            this.OnPropertyChanged("ReplacementValues");
        }
        #endregion

        #region ReplacementValue
        /// <summary>
        /// 置換文字列を取得または設定します。
        /// </summary>
        public string ReplacementValue
        {
            get
            {
                return m_mainViewModel.Info.ReplacementValue;
            }
            set
            {
                if (m_mainViewModel.Info.ReplacementValue == value)
                {
                    return;
                }
                if (ReplacementValues.Contains(value))
                {
                    ReplacementValues.Remove(value);
                }
                ReplacementValues.Insert(0, value);
                m_mainViewModel.Info.ReplacementValue = value;
                this.OnPropertyChanged("ReplacementValue");
                m_mainViewModel.IsModified = true;
            }
        }
        #endregion

        #region ReplacementValues
        private ObservableCollection<string> m_replacementValues;
        /// <summary>
        /// 置換文字列一覧を取得します。
        /// </summary>
        public ObservableCollection<string> ReplacementValues
        {
            get
            {
                if (m_replacementValues == null)
                {
                    m_replacementValues = new ObservableCollection<string>();
                }
                return m_replacementValues;
            }
        }
        #endregion

    }
}
